การใช้ Crontab บน CentOS 7

Crontab คือ Automate system task บน CentOS ซึ่งทำงานอัตโนมัติตามเวลาที่เรากำหนด สามารถใช้ประโยชน์กับงานที่ต้องทำซำ้ๆ ยกตัวอย่างเช่น ต้องการลบ log file บน server ทุกวันเวลาเที่ยงคืน เป็นต้น

การติดตั้ง Crontab

1.Connect ผ่าน SSH และทำการ Update Software เป็นเวอร์ชั่นล่าสุด

sudo yum update

2.ทำการตรวจสอบ และ ติดตั้ง cronie package โดยปกติ cron utility จะถูกติดตั้งมาแล้ว เราสามารถ verify และ confirm ด้วยคำสั่ง

sudo rpm -q cronie

หากยังไม่ได้ ติดตั้ง ให้ใช้คำสั่งดังนี้

sudo yum install cronie

3.ทำการ check ว่า service ทำงานหรือไม่

sudo systemctl status crond.service

กรณีที่ Crontab ทำงานเป็นปกติ จะแสดงผลลัพธ์ Active: active (running)

การใช้งาน Crontab

1.สามารถแก้ไขเปลี่ยนแปลง Crontab ได้ใน /etc/crontab ใช้คำสั่งแสดงสิ่งที่อยู่ในไฟล์

sudo cat /etc/crontab

ภายในจะมีคำอธิบายและการใช้ crontab ดังนี้

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 5 * * * root run-parts /etc/cron.daily
22 5 * * 0 root run-parts /etc/cron.weekly
42 5 1 * * root run-parts /etc/cron.monthly

2.Option ของ crontab สามารถดูได้ใน Help ซึ่งจะมี Option ที่มีประโยชน์ ต่างๆดังนี้

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u   define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n   set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x   enable debugging

ตัวอย่างการใช้งาน Crontab

ตัวอย่าง ให้ทำการลบ log file ที่เก่ากว่า 5 วัน เวลาเที่ยงคืน

1. ใช้คำสั่ง crontab -l เพื่อตรวจสอบ list Crantab ของ User นั้นๆ

crontab -l

2. หากไม่มีให้เพิ่ม crontab job ด้วยคำสั่ง crontab -e

crontab -e

3. เพิ่ม job เช่น

0 * * * * find /yourfile/logs/ -mtime +5 -exec rm {} \;

คำสั่งนี้จะทำการลบ log file ที่เก่ากว่า 5 วัน ในเวลาเที่ยงคืนของทุกๆวัน

4. ทำการ save file
5. Restart crontab ด้วยคำสั่ง

sudo systemctl restart crond.service

หรือใช้คำสั่งเพิ่ม job แบบบรรทัดเดียว โดยไม่ต้องสร้าง script file ซึ่งตัวอย่างนี้จะมีประโยชน์สำหรับ สร้าง job ผ่าน Build&Deployment Framework

(crontab -l ; echo "0 * * * * find /yourfile/logs/ -mtime +5 -exec rm {} \;") | crontab -

จากนั้นทำการ Restart crontab

Challenge : ให้ลองสร้าง script แสดง Text และใช้ crontab ในการ run script ทุกๆ 1 ชั่วโมง

References

  • https://www.ibm.com/support/knowledgecenter/th/ssw_aix_71/com.ibm.aix.cmds1/crontab.htm
  • https://www.rosehosting.com/blog/automate-system-tasks-using-cron-on-centos-7/

Related posts